package com.zeei.bfs.dao;

import java.util.List;
import java.util.Map;

import com.zeei.common.vo.MenuVO;
import com.zeei.common.vo.PointSysTypeVO;

public interface MenuDao {

	/**
	 * 方法描述:查询菜单
	 *
	 * @param menu
	 * @return
	 */
	List<MenuVO> queryMenu(MenuVO menu);

	/**
	 * 方法描述：查询角色相关联的菜单
	 * 
	 * @param queryVO
	 * @return
	 */
	List<MenuVO> queryRoleMenu(Map<?, ?> condition);

	/**
	 * 方法描述：查询用户相关联的菜单
	 * 
	 * @param userId
	 * @return
	 */
	List<MenuVO> queryUserMenu(Integer userId);

	/**
	 * 方法描述：通过条件查询用户相关联的菜单
	 * 
	 * @param condition
	 * @return
	 */
	List<MenuVO> queryUserMenuByCondition(Map<?, ?> condition);

	/**
	 * 方法描述：查询所有的菜单树
	 * 
	 * @return
	 */
	List<MenuVO> queryAllMenuTree();

	/**
	 * 方法描述：查询菜单下的所有子菜单
	 * 
	 * @param menuId
	 * @return
	 */
	List<MenuVO> queryMenuTreeAllChild(Integer menuId);

	/**
	 * 方法描述：通过条件查询菜单森林
	 * 
	 * @param condition
	 * @return
	 */
	List<MenuVO> queryUserMenuForestByCondition(Map<?, ?> condition);

	/**
	 * 方法描述：查询用户一级菜单（子系统）菜单（桌面应用）
	 * 
	 * @param userId
	 * @return
	 */
	List<MenuVO> queryUserFirstMenu(Integer userId);

	/**
	 * 方法描述:通过条件查询菜单
	 *
	 * @param condition
	 * @return
	 */
	List<MenuVO> queryMenuByCondition(Map<?, ?> condition);

	/**
	 * 方法描述:插入菜单
	 *
	 * @param menu
	 * @return
	 */
	Integer insertMenu(MenuVO menu);

	/**
	 * 方法描述:批量删除菜单
	 *
	 * @param menuIds
	 * @return
	 */
	Integer deleteMenuByIds(List<Integer> menuIds);

	/**
	 * 方法描述:通过主键修改菜单
	 *
	 * @param menu
	 * @return
	 */
	Integer updateMenuById(MenuVO menu);

	/**
	 * 方法描述:通过主键逻辑删除掉菜单
	 *
	 * @param list
	 * @return
	 */
	Integer removeMenuByIds(List<Integer> list);

	List<PointSysTypeVO> getSystemTable();

}
